﻿using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Controllers;
using Interfaces;

namespace Views.Moduler
{
    public partial class SøgHardware : UserControl
    {
        #region Fields

        private readonly Controller _controller;
        private IEnhed _selectedEnhed;

        #endregion

        #region Creation

        public SøgHardware(Controller controller)
        {
            InitializeComponent();
            _controller = controller;

            OpdaterSide();
        }

        #endregion

        #region Events

        private void BtnVisUdlån_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedEnhed == null) return;

            if (_selectedEnhed is IDiverse)
            {
                var window = new SøgDiverseUdlån(_controller, _selectedEnhed, this);
                window.ShowDialog();
            }
            else if (_selectedEnhed is IComputer)
            {
                var window = new SøgComputerUdlån(_controller, _selectedEnhed, this);
                window.ShowDialog();
            }
            else if (_selectedEnhed is IMobil)
            {
                var window = new SøgMobilUdlån(_controller, _selectedEnhed, this);
                window.ShowDialog();
            }
        }

        private void BtnVisHistorik_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedEnhed == null) return;

            var window = new EnhedsHistorik(_controller, _selectedEnhed);
            window.ShowDialog();
        }

        private void TxtSøgning_TextChanged(object sender, TextChangedEventArgs e)
        {
            //Søger i listen bestående af enheder, som indeholder noget ud fra det indtastede data. 
            //Hvis den finder nogen enheder blir det tilføjet til listen som bliver vist i listviewed  
            LwEnheder.ItemsSource =
                _controller.HentAlleEnheder().Where(s => s.Navn.ToLower()
                                                          .Contains(TxtSøgning.Text.ToLower()))
                                                          .ToList();
        }

        private void LwEnheder_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var enhed = (IEnhed) LwEnheder.SelectedItem;
            _selectedEnhed = enhed;

            if (_selectedEnhed == null) return;

            ValgtEnhed();
        }

        private void ValgtEnhed()
        {
            BtnVisHistorik.IsEnabled = true;
            BtnVisUdlån.IsEnabled = true;
        }

        private void SøgHardware_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
                TxtSøgning.Clear();
            if (e.Key == Key.Enter)
                TxtSøgning.SelectAll();
        }

        #endregion

        #region Tilstandsstyring

        public void OpdaterSide()
        {
            //Tilstandsstyring
            LwEnheder.ItemsSource = null;
            BtnVisUdlån.IsEnabled = false;
            BtnVisHistorik.IsEnabled = false;
            TxtSøgning.Clear();
            TxtSøgning.Focus();

            OpdaterListview();
        }

        private void OpdaterListview()
        {
            LwEnheder.ItemsSource = _controller.HentAlleEnheder();
        }

        #endregion
    }
}
